const gulp = require('gulp');

// 1. 简单使用
/* 注意：3.x.x不需要加async，4.x.x需要，否则指令无法完成 */

/* gulp.task('hello',async ()=>{
    console.log('hello world');
}) */

// 2.基本使用
/* 注意：所有路径的设置都是以根目录作为起始地址 */
    /*
        * task(name,callback)：gulp指令绑定，类似于事件绑定
        * src(url)：找到并读取指定路径的源文件
        * pipe()： 数据处理API，把数据转化为流的形式
        * dest(url)：转存到指定文件夹，没有则会创建
    */

/* gulp.task('html',async ()=>{
    gulp.src('./src/index.html')
    .pipe(gulp.dest('./dist'))
}) */

// 3.gulp监听(核心功能)
    /* 
        * watch：监听改变的文件路径并自动执行相对于指令
    */
// 3.x.x 版本写法
/* gulp.task("watch",async()=>{
    gulp.watch('./src/index.html',['html'])
}) */
// 4.x.x 版本写法：异步parallel() || 同步series() -> 执行指令

/* gulp.task("watch",async()=>{
    // 当监听到index.html改变时，就自动执行html的gulp执行
    gulp.watch('./src/index.html',gulp.parallel('html'))
}) */

/* 然而实际上操作很多文件，这种单一文件的转存写法就不可取 */


// 4.高级应用：以正则形式找到所有源文件(仅支持部分正则)
// 4.1 转存html
// 4.1.1 不论层级地找到所有html文件(**/*)
gulp.task('html',async()=>{
    gulp.src(['./src/**/*.html'])
    .pipe(gulp.dest('./dist'))
})

// 4.1.2 排除指定文件的转存
// gulp.task('html',async()=>{
//     gulp.src(['./src/**/*.html','!./src/html/pass/nopipe.html'])
//     .pipe(gulp.dest('./dist'))
// })

// 4.2 转存js
gulp.task('js',async()=>{
    gulp.src('./src/javascript/**/*.js')
    .pipe(gulp.dest('./dist/javascript'))
})

// 4.3 默认指令 || 组合指令
/* 4.3.1 异步队列(不推荐) */
/* gulp.task("default",gulp.parallel('html','js')); */
/* 4.3.2 同步队列 */
gulp.task("default",gulp.series('html','js'));

/* 注意：默认指令只需执行在cmd输入gulp即可执行default指令 */